<?php
/**
 * Created by PhpStorm.
 * User: xiao
 * Date: 2018/2/7
 * Time: 19:50
 */

namespace App\Http\Common\Utils;


use Illuminate\Support\Facades\Cache;

class TokenUtils
{

    const ERROR_MESSAGE_NO_TOKEN = 'token不能为空';
    const ERROR_MESSAGE_TOKEN_ERROR = 'token错误';

    const TOKEN_NAME = 'token';                                            // token的key
    const TOKEN_LIFETIME_MINUTES = 10080;                                  // Token的保存时间   7 天

    /**
     * 保存Token信息
     * @param $userSource
     * @return \Illuminate\Http\JsonResponse
     */
    public static function saveToken($userSource)
    {
        $token = self::_createToken($userSource);                             // 创建TOKEN

        $flag = Cache::add(self::TOKEN_NAME.'_'.$token, $userSource, self::TOKEN_LIFETIME_MINUTES);

        if ($flag) {
            $returnArr['token']     = $token;
            $returnArr['username']  = $userSource['username'];
            $returnArr['telephone'] = $userSource['telephone'];
            $returnArr['nickname']  = $userSource['nickname'];
            $returnArr['sex']       = $userSource['sex'];
            $returnArr['avatar']    = $userSource['avatar'];
            $returnArr['lifeTime']  = time() + self::TOKEN_LIFETIME_MINUTES * 60  - 1;

            return JUtils::R($returnArr);
        }

        return JUtils::RE('服务器繁忙，请稍后再试');
    }

    /**
     * 创建TOKEN
     * @param $userData                 @用户数据
     * @return string                   @返回Token
     */
    private static function _createToken($userData)
    {
        $userData = json_encode($userData);
        return md5(md5($userData.uniqid()));
    }


//    /**
//     * 获取Token
//     * @param string $method @ GET|POST
//     * @return mixed
//     */
//    public static function T($method = '')
//    {
//        if (empty($method)) $method = NetMessage::G;
//        $key = self::TOKEN_NAME;
//        return I("{$method}.{$key}", '');
//    }
//
//    /**
//     * 保存用户信息在Memcache中
//     * @param $userData @用户数据
//     * @param $token @用户Token
//     * @return mixed        @null, 没保存成功， token，凭证
//     */
//    public static function S($userData, $token = '')
//    {
//        if (empty($token)) {
//            $token = self::_createToken($userData);                                 // 创建TOKEN
//        }
//        $result = S($token, $userData, self::TOKEN_LIFETIME);                       // 保存token到memcache中
//        if ($result == false) return null;
//        return $token;
//    }
//
//
//    // ######## 需要对Token进行检查 不通过，直接返回JSON  START ########
//
//    /**
//     * 获取用户id
//     * @param $token
//     * @param bool $check @ 是否检测【检测，如果有问题，直接返回json】
//     * @return mixed        @ 用户ID
//     */
//    public static function UserID($token, $check = true)
//    {
//        self::_checkToken($token, $check);
//
//        return self::_userID($token, $check);
//    }
//
//
//    /**
//     * 获取用户信息
//     * @param $token @ Token
//     * @param bool $check @ 是否检测【检测，如果有问题，直接返回json】
//     * @return mixed        @ 用户信息
//     */
//    public static function UserData($token, $check = true)
//    {
//        self::_checkToken($token, $check);
//        return self::_userData($token, $check);
//    }
//
//
//    /**
//     * 获取用户状态
//     * @param $token @ Token
//     * @param bool $check @ 是否检测【检测，如果有问题，直接返回json】
//     * @return bool         @ true，存在用户， false不存在用户
//     */
//    public static function UserState($token, $check = true)
//    {
//        self::_checkToken($token, $check);
//        return self::_userState($token, $check);
//    }
//
//
//    /**
//     * 获取用户信息【通过key】
//     * @param $token @ Token
//     * @param $key @ key
//     * @param bool $check @ 是否检测【检测，如果有问题，直接返回json】
//     * @return mixed
//     */
//    public static function userMessage($token, $key, $check = true)
//    {
//        self::_checkToken($token, $check);
//        return self::_userMessage($token, $key, $check);
//    }
//
//    /**
//     * 更新用户数据
//     * @param $token
//     * @param $key
//     * @param $value
//     * @param bool $check
//     */
//    public static function updateUserMessage($token, $key, $value, $check = true)
//    {
//        self::_checkToken($token, $check);
//        self::_updateUserMessage($token, $key, $value, $check);
//    }
//
//
//    /**
//     * 检测用户是否已经登录
//     * @param $token
//     */
//    public static function checkLogin($token)
//    {
//        self::_checkToken($token);
//        $state = self::_userState($token);
//        if (!$state) JsonUtils::R(UserMessage::noLogin());
//    }
//
//
//    /**
//     * 删除Memcache中的用户数据
//     * @param $token @token
//     * @param bool $check @是否需要对token进行验证
//     * @return mixed        @true 清除成功， false清除失败
//     */
//    public static function DeleteToken($token, $check = true)
//    {
//        self::_checkToken($token, $check);
//        return self::_deleteToken($token);
//    }
//
//
//
//
//
//
//
//
//    // ######## private START #########
//
//    /**
//     * 检测Token
//     * @param bool $check @ 是否检测【检测，如果有问题，直接返回json】
//     * @param $token
//     */
//    private static function _checkToken($token, $check = true)
//    {
//        if (empty($token) && $check) self::_tokenError(self::ERROR_MESSAGE_NO_TOKEN);
//    }
//
//
//    /**
//     * 获取用户id
//     * @param $token @ token
//     * @param bool $check @是否检验
//     * @return mixed
//     */
//    private static function _userID($token, $check = true)
//    {
//        return self::_userMessage($token, 'user_id', $check);
//    }
//
//    /**
//     *  获取用户数据
//     * @param $token @ token
//     * @param bool $check @是否检验
//     * @return mixed
//     */
//    private static function _userData($token, $check = true)
//    {
//        $userData = S($token);
//        if (empty($userData) && $check) self::_tokenError();
//        return $userData;
//    }
//
//    /**
//     * 获取用户信息【通过key】
//     * @param $token
//     * @param $key
//     * @param bool $check @是否检验
//     * @return mixed
//     */
//    private static function _userMessage($token, $key, $check = true)
//    {
//        $user = self::_userData($token, $check);
//        return $user[$key];
//    }
//
//    /**
//     * 更新用户数据到Memcache中
//     * @param $token @用户Token
//     * @param $key @key
//     * @param $value @值
//     * @param bool $check
//     */
//    private static function _updateUserMessage($token, $key, $value, $check = true)
//    {
//        $user = self::_userData($token, $check);
//        if (empty($user)) return;
//        $user[$key] = $value;
//        S($token, $user, self::TOKEN_LIFETIME);                         // 保存token到memcache中
//    }
//
//
//    /**
//     * 获取用户状态
//     * @param $token @ token
//     * @param bool $check @ 是否检验
//     * @return bool             @ true，存在用户， false不存在用户
//     */
//    private static function _userState($token, $check = true)
//    {
//        $userID = self::_userID($token, $check);
//        if (empty($userID)) return false;
//        return true;
//    }
//
//    /**
//     * JSON 返回token错误信息
//     * @param string $msg
//     */
//    private static function _tokenError($msg = '')
//    {
//        if (empty($msg)) $msg = self::ERROR_MESSAGE_TOKEN_ERROR;
//        JsonUtils::R(parseJson(-1, null, $msg));
//    }
//
//    /**
//     * 创建TOKEN
//     * @param $userData @用户数据
//     * @return string                   @返回Token
//     */
//    private static function _createToken($userData)
//    {
//        $userData = json_encode($userData);
//        return md5(md5($userData . uniqid()));
//    }
//
//    /**
//     * 清除Memcache中的用户信息
//     * @param $token
//     * @return mixed
//     */
//    private static function _deleteToken($token)
//    {
//        return S($token, null);                                                    // 清除memcache数据
//    }


}